home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / machserver / 1.098 / include / sys / sem.h < prev    next >
C/C++ Source or Header  |  1991-09-10  |  4KB  |  169 lines

  1. /*    @(#)sem.h 1.9 88/02/08 SMI; from S5R2 6.1 */
  2. /* $Header: /sprite/src/lib/include/sys/RCS/sem.h,v 1.2 91/09/09 22:13:33 kupfer Exp $ */
  3.  
  4. /*
  5.  *    IPC Semaphore Facility.
  6.  */
  7.  
  8. /*
  9.  *    Semaphore Operation Flags.
  10.  */
  11.  
  12. #define    SEM_UNDO    010000    /* set up adjust on exit entry */
  13.  
  14. /*
  15.  *    Semctl Command Definitions.
  16.  */
  17.  
  18. #define    GETNCNT    3    /* get semncnt */
  19. #define    GETPID    4    /* get sempid */
  20. #define    GETVAL    5    /* get semval */
  21. #define    GETALL    6    /* get all semval's */
  22. #define    GETZCNT    7    /* get semzcnt */
  23. #define    SETVAL    8    /* set semval */
  24. #define    SETALL    9    /* set all semval's */
  25. #define    GETKEYS    10    /* get all keys */
  26.  
  27. /*
  28.  *    Structure Definitions.
  29.  */
  30.  
  31. /*
  32.  *    There is one semaphore id data structure for each set of semaphores
  33.  *        in the system.
  34.  */
  35.  
  36. struct semid_ds {
  37.     struct ipc_perm    sem_perm;    /* operation permission struct */
  38.     struct sem    *sem_base;    /* ptr to first semaphore in set */
  39.     ushort        sem_nsems;    /* # of semaphores in set */
  40.     time_t        sem_otime;    /* last semop time */
  41.     time_t        sem_ctime;    /* last change time */
  42. };
  43.  
  44. /*
  45.  *    There is one semaphore structure for each semaphore in the system.
  46.  */
  47.  
  48. struct sem {
  49.     ushort    semval;        /* semaphore text map address */
  50.     int    sempid;        /* pid of last operation */
  51.     ushort    semncnt;    /* # awaiting semval > cval */
  52.     ushort    semzcnt;    /* # awaiting semval = 0 */
  53. #ifdef KERNEL
  54.     Sync_Condition semLock;    /* Lock for the semaphore. */
  55. #endif
  56. };
  57.  
  58. /*
  59.  *    User semaphore template for semop system calls.
  60.  */
  61.  
  62. struct sembuf {
  63.     short    sem_num;    /* semaphore # */
  64.     short    sem_op;        /* semaphore operation */
  65.     short    sem_flg;    /* operation flags */
  66. };
  67.  
  68. /*
  69.  *    'arg' argument template for semctl system calls.
  70.  */
  71. union semun {
  72.     int        val;    /* value for SETVAL */
  73.     struct semid_ds    *buf;    /* buffer for IPC_STAT & IPC_SET */
  74.     unsigned short        *array;    /* array for GETALL & SETALL */
  75. };
  76.  
  77.  
  78. /*
  79.  *    Implementation Constants.
  80.  */
  81.  
  82. #define    PSEMN    (PZERO + 3)    /* sleep priority waiting for greater value */
  83. #define    PSEMZ    (PZERO + 2)    /* sleep priority waiting for zero */
  84.  
  85. #define    SEMVMX    32767        /* semaphore maximum value */
  86. #define    SEMAEM    16384        /* adjust on exit max value */
  87.  
  88.  
  89. /*
  90.  *    Permission Definitions.
  91.  */
  92.  
  93. #define    SEM_A    0200    /* alter permission */
  94. #define    SEM_R    0400    /* read permission */
  95.  
  96. /*
  97.  *    There is one undo structure per process in the system.
  98.  */
  99.  
  100. struct sem_undo {
  101.     struct sem_undo    *un_np;    /* ptr to next active undo structure */
  102.     short        un_cnt;    /* # of active entries */
  103.     struct undo {
  104.         short    un_aoe;    /* adjust on exit values */
  105.         short    un_num;    /* semaphore # */
  106.         int    un_id;    /* semid */
  107.     }    un_ent[1];    /* (semume) undo entries (one minimum) */
  108. };
  109.  
  110. /*
  111.  * semaphore information structure
  112.  */
  113. struct    seminfo    {
  114.     int    semmap,        /* # of entries in semaphore map */
  115.         semmni,        /* # of semaphore identifiers */
  116.         semmns,        /* # of semaphores in system */
  117.         semmnu,        /* # of undo structures in system */
  118.         semmsl,        /* max # of semaphores per id */
  119.         semopm,        /* max # of operations per semop call */
  120.         semume,        /* max # of undo entries per process */
  121.         semusz,        /* size in bytes of undo structure */
  122.         semvmx,        /* semaphore maximum value */
  123.         semaem;        /* adjust on exit max value */
  124. };
  125. struct seminfo    seminfo;    /* configuration parameters */
  126.  
  127.  
  128. /*
  129.  *    Configuration Parameters
  130.  * These parameters are tuned by editing the system configuration file.
  131.  * The following lines establish the default values.
  132.  */
  133. #ifndef    SEMMNI
  134. #define    SEMMNI    10        /* # of semaphore identifiers */
  135. #endif
  136. #ifndef    SEMMNS
  137. #define    SEMMNS    60        /* # of semaphores in system */
  138. #endif
  139. #ifndef    SEMUME
  140. #define    SEMUME    10        /* max # of undo entries per process */
  141. #endif
  142. #ifndef    SEMMNU
  143. #define    SEMMNU    30        /* # of undo structures in system */
  144. #endif
  145.  
  146. /* The following parameters are assumed not to require tuning */
  147. #ifndef    SEMMAP
  148. #define    SEMMAP    30        /* # of entries in semaphore map */
  149. #endif
  150. #ifndef    SEMMSL
  151. #define    SEMMSL    SEMMNS        /* max # of semaphores per id */
  152. #endif
  153. #ifndef    SEMOPM
  154. #define    SEMOPM    100        /* max # of operations per semop call */
  155. #endif
  156.  
  157.         /* size in bytes of undo structure */
  158. #define    SEMUSZ    (sizeof(struct sem_undo)+sizeof(struct undo)*SEMUME)
  159.  
  160.  
  161. /*
  162.  * Structures allocated in machdep.c
  163.  */
  164. struct semid_ds *sema;        /* semaphore id pool */
  165. struct sem    *sem;        /* semaphore pool */
  166. struct map    *semmap;    /* semaphore allocation map */
  167. struct sem_undo    **sem_undo;    /* per process undo table */
  168. int        *semu;        /* undo structure pool */
  169.